const state = {
    // // { id: 商品id, count: 购买数量，selected: false  }
    // car: [],
    // { id: 商品id, count: 购买数量，selected: false  }
    car: getItem('car'),
    // 当前要购买的商品：buy: [{ id: '', count: '' }]
    // 当在购物车里点“去结算”时，就把购物车车中已经选中的商品放进去
    buy: getItem('buy'),
    
};

const getters = {
            // 获取商品数量
        getGoodsCount(state) {
            const goods = {};
            state.car.forEach((item) => {
                goods[item.id] = item.count;
            });
            return goods;
        },

        // 获取商品有没有选中的状态值（selected）
        getGoodsSelected(state) {
            var goods = {};
            state.car.forEach((item) => {
                goods[item.id] = item.selected;
            });
            return goods;
        },

        // 获取选中的商品的件数
        getSelectedCount(state) {
            let count = 0;
            state.car.forEach((item) => {
                if (item.selected) {
                    count += item.count;
                }
            });
            return count;
        },

        // 获取选中的商品
        getSelectedGoods(state) {
            const goods = {};
            state.car.forEach((item) => {
                if (item.selected) {
                    goods[item.id] = item;
                }
            });
            return goods;
        },

        // 获取要购买的商品
        getBuy(state) {
            const goods = {};
            state.buy.forEach((item) => {
                goods[item.id] = item;
            });
            return goods;
        },
        updateGoodsSelected(state, info) {
            state.car.some((item) => {
                if (item.id === info.id) {
                    item.selected = info.selected;
                }
            });
            setItem('car', state.car);
        },
        // // 获取要购买的商品
        // getBuy(state) {
        //     var goods = {};
        //     state.buy.forEach(item => {
        //         goods[item.id] = item;
        //     });
        //     return goods;
        // }
        setBuy(state, goods) {
            state.buy = [];
            if (goods) {
                state.buy.push(goods);
            } else {
                state.car.some((item) => {
                    if (item.selected) {
                        state.buy.push(item);
                    }
                });
            }
            setItem('buy', state.buy);
        }
};

const actions = {};

const mutations = {
    addCar(state, goodsinfo) {
        let flag = false;
        state.car.some((item) => {
            if (item.id === goodsinfo.id) {
                item.count += parseInt(goodsinfo.count);
                flag = true;
                return true;
            }
        });
        if (!flag) {
            state.car.push(goodsinfo);
        }
        setItem('car', state.car)
    },
    updateGoodsInfo(state, goodsinfo) {
        state.car.some((item) => {
            if (item.id === goodsinfo.id) {
                item.count = parseInt(goodsinfo.count);
                return true;
            }
        });
        setItem('car', state.car);
    },
    removeCar(state, id) {
        state.car.some((item, i) => {
            if (item.id === id) {
                state.car.splice(i, 1);
                return true;
            }
        });
        setItem('car', state.car);
    },
    setBuy(state) {
        state.buy = [];
        state.car.some((item) => {
            if (item.selected) {
                state.buy.push(item);
            }
        });
        setItem('buy', state.buy);
    }
};

function setItem(name, item) {
    localStorage.setItem(name, JSON.stringify(item));
}

function getItem(name) {
    return JSON.parse(localStorage.getItem(name) || '[]');
}

export default {
    namespaced: true,
    state,
    getters,
    actions,
    mutations
};